#include "ListaZwierzat.h"

/* konstruktor*/
ListaZwierzat::ListaZwierzat() { 
		this->poczatek = NULL;
	}


/* DODAJE ZWIERZE NA KONIEC LISTY*/
void ListaZwierzat::dodajNaKoniec(Zwierze *z) {
    ElListy *nowy = new ElListy(z);

    ElListy *tmp_wsk = this -> poczatek;

		if (tmp_wsk == NULL) {
			poczatek = nowy;
		} else {
			while (tmp_wsk->nast != NULL) {
				tmp_wsk = tmp_wsk->nast;
			}
			tmp_wsk -> nast = nowy;
		}
	}
//dodaje zwierze na koniec listy. aby ulatwic -operator	
ListaZwierzat& ListaZwierzat::operator +=(Zwierze *b) {
this -> dodajNaKoniec(b);
return *this;
}
//dodaje jedna liste na koniec drugiej
ListaZwierzat& ListaZwierzat::operator +=(ListaZwierzat *druga) {
	
		if (druga -> poczatek != NULL) {
			ElListy *tmp_wsk = druga -> poczatek;
			while (tmp_wsk != NULL) {
				(*this) += (tmp_wsk -> zwierze);
				tmp_wsk = tmp_wsk -> nast;
			}
		}
	
	return *this;
}




/* WYPISZ LISTE ZWIERZATr*/
/*
	void ListaZwierzat::wypiszListe() {
		if (this -> poczatek == NULL) {
			cout<<"Pusta lista"<<endl;
		} else {
			ElListy *tmp_wsk = this -> poczatek;
			while (tmp_wsk != NULL) {
				cout<<tmp_wsk -> zwierze ->opis()<<endl;
				tmp_wsk = tmp_wsk -> nast;
			}
		}

	}
*/

//wyswietla liste
ostream & operator<<(ostream& ekran, ListaZwierzat & obiekt) {
		if (obiekt.poczatek == NULL) {
			ekran<<"Pusta lista"<<endl;
		} else {
			ElListy *tmp_wsk = obiekt.poczatek;
			while (tmp_wsk != NULL) {
				ekran<<tmp_wsk -> zwierze ->opis()<<endl;
				tmp_wsk = tmp_wsk -> nast;
			}
		}
	return ekran;
}	
	
	
/* ZWRACA POCZATEK (GLOWE) LISTY ZWIERZAT*/
    ElListy *ListaZwierzat::getPoczatek() {
        return this -> poczatek; //glowa listy
    }
